diff --git a/system/database/DB_driver.php b/system/database/DB_driver.php
index 811f090..a7a89a9 100644
--- a/system/database/DB_driver.php
+++ b/system/database/DB_driver.php
@@ -156,7 +156,7 @@
 		// Is there a cache direcotry specified in the config file?
 		if ($this->cachedir != '')
 		{
-			$this->cache_set_dir($this->cachedir);
+			$this->cache_set_path($this->cachedir);
 		}
 	}
 	
@@ -221,7 +221,7 @@
 	 * @return	mixed		 
 	 */	
 	function query($sql, $binds = FALSE, $return_object = TRUE)
-	{	
+	{
 		if ($sql == '')
 		{
 			if ($this->db_debug)
@@ -235,7 +235,7 @@
 		// Is query caching enabled?  If the query is a "read type" we will
 		// grab the previously cached query if it exists and return it.
 		if ($this->cache_on == TRUE AND stristr($sql, 'SELECT'))
-		{		
+		{				
 			if (FALSE !== ($cache = $this->cache_read($sql)))
 			{
 				return $cache;
@@ -285,7 +285,15 @@
 		// Was the query a "write" type?
 		// If so we'll simply return true
 		if ($this->is_write_type($sql) === TRUE)
-		{		
+		{
+			// If caching is enabled we'll auto-cleanup any
+			// existing files related to this particular URI
+			
+			if ($this->cache_on == TRUE)
+			{
+				$this->cache_delete();
+			}
+		
 			return TRUE;
 		}
 		
@@ -296,19 +304,12 @@
 		{
 			return TRUE;
 		}
-		
-		// Define the result driver name
-		$result = 'CI_DB_'.$this->dbdriver.'_result';
-		
-		// Load the result classes
-		if ( ! class_exists($result))
-		{
-			include_once(BASEPATH.'database/DB_result'.EXT);
-			include_once(BASEPATH.'database/drivers/'.$this->dbdriver.'/'.$this->dbdriver.'_result'.EXT);		
-		}
+	
+		// Load and instantiate the result driver	
 
-		// Instantiate the result object	
-		$RES = new $result();
+		$driver = $this->load_rdriver();
+		
+		$RES = new $driver();
 		$RES->conn_id	= $this->conn_id;
 		$RES->db_debug	= $this->db_debug;
 		$RES->result_id	= $this->result_id;
@@ -319,9 +320,37 @@
 			$RES->curs_id   = NULL;
 			$RES->limit_used = $this->limit_used;
 		}
-
+		
+		// Is query caching enabled?  If so, we'll serialize the 
+		// result object and save it to a cache file
+		if ($this->cache_on == TRUE)
+		{				
+			$this->cache_write($sql, $RES);
+		}
+		
 		return $RES;
 	}
+
+	// --------------------------------------------------------------------
+
+	/**
+	 * Load the result drivers
+	 * 
+	 * @access	public
+	 * @return	string 	the name of the result class		 
+	 */		
+	function load_rdriver()
+	{
+		$driver = 'CI_DB_'.$this->dbdriver.'_result';
+
+		if ( ! class_exists($driver))
+		{
+			include_once(BASEPATH.'database/DB_result'.EXT);
+			include_once(BASEPATH.'database/drivers/'.$this->dbdriver.'/'.$this->dbdriver.'_result'.EXT);
+		}
+		
+		return $driver;
+	}
 	
 	// --------------------------------------------------------------------
 
@@ -859,7 +888,7 @@
 	 */		
 	function cache_on()
 	{
-		$this->query_caching = TRUE;
+		return $this->query_caching = TRUE;
 	}
 
 	// --------------------------------------------------------------------
@@ -872,7 +901,7 @@
 	 */	
 	function cache_off()
 	{
-		$this->query_caching = FALSE;
+		return $this->query_caching = FALSE;
 	}
 	
 	// --------------------------------------------------------------------
@@ -882,10 +911,15 @@
 	 *
 	 * @access	public
 	 * @param	string	the path to the cache directory
-	 * @return	void
+	 * @return	bool
 	 */		
-	function cache_set_dir($path = '')
+	function cache_set_path($path = '')
 	{
+		if ($path == '')
+		{
+			return $this->cache_off();
+		}
+	
 		// Add a trailing slash to the path if needed
 		$path = preg_replace("/(.+?)\/*$/", "\\1/",  $path);
 	
@@ -896,33 +930,12 @@
 				return $this->display_error('db_invalid_cache_path');
 			}
 			
-			$this->enable_caching(FALSE);
-			return FALSE;
+			// If the path is wrong we'll turn off caching
+			return $this->cache_off();
 		}
 		
 		$this->cache_dir = $path;
-	}
-	
-	// --------------------------------------------------------------------
-
-	/**
-	 * Set Cache Path
-	 *
-	 * @access	public
-	 * @param	string	the path to the cache directory
-	 * @return	void
-	 */	
-	function cache_set_path($sql)
-	{
-		$obj =& get_instance();		
-				
-		// The URI being requested will become the name of the cache sub-folder
-		
-		$uri = ($obj->uri->uri_string() == '') ? 'index' : $obj->uri->uri_string();
-		
-		// Convert the SQL query into a hash.  This will become the cache file name.
-	
-		return md5($uri).'/'.md5($sql);
+		return TRUE;
 	}
 	
 	// --------------------------------------------------------------------
@@ -930,31 +943,27 @@
 	/**
 	 * Retreive a cached query
 	 *
+	 * The URI being requested will become the name of the cache sub-folder.
+	 * An MD5 hash of the SQL statement will become the cache file name
+	 *
 	 * @access	public
 	 * @return	string
 	 */
 	function cache_read($sql)
-	{	
-		if ( ! @is_dir($this->cache_dir))
+	{
+		if ( ! $this->cache_set_path($this->cache_dir))
 		{
-			return $this->cache_on = FALSE;
+			return $this->cache_off();
 		}
 	
-		$filepath = $this->cache_set_path($sql);
-	
-		if ( ! @file_exists($this->cache_dir.$filepath))
-		{
-			return FALSE;
-		}
+		$obj =& get_instance();	
+		$uri  = ($obj->uri->segment(1) == FALSE) ? 'base'  : $obj->uri->segment(2);
+		$uri .= ($obj->uri->segment(2) == FALSE) ? 'index' : $obj->uri->segment(2);
 		
-		if ( ! $fp = @fopen($this->cache_dir.$filepath, 'rb'))
-		{
-			return FALSE;
-		}
-
-		$cachedata = file_get_contents($this->cache_dir.$filepath);
+		$filepath = md5($uri).'/'.md5($sql);
 		
-		if ( ! is_string($cachedata))
+		$obj->load->helper('file');	
+		if (FALSE === ($cachedata = read_file($this->cache_dir.$filepath)))
 		{	
 			return FALSE;
 		}
@@ -972,51 +981,79 @@
 	 */
 	function cache_write($sql, $object)
 	{
-		if ( ! @is_dir($this->cache_dir))
+		if ( ! $this->cache_set_path($this->cache_dir))
 		{
-			return $this->cache_on = FALSE;
+			return $this->cache_off();
 		}
-	
-		$filepath = $this->cache_set_path($sql);
-	
-	
-	
+
+		$obj =& get_instance();	
+		$uri  = ($obj->uri->segment(1) == FALSE) ? 'base'  : $obj->uri->segment(2);
+		$uri .= ($obj->uri->segment(2) == FALSE) ? 'index' : $obj->uri->segment(2);
 		
-	
-	
-		$dirs = array(PATH_CACHE.'db_cache', substr($this->cache_dir, 0, -1));
+		$dir_path = $this->cache_dir.md5($uri).'/';
 		
-		foreach ($dirs as $dir)
-		{	   
-			if ( ! @is_dir($dir))
+		$filename = md5($sql);
+	
+		if ( ! @is_dir($dir_path))
+		{
+			if ( ! @mkdir($dir_path, 0777))
 			{
-				if ( ! @mkdir($dir, 0777))
-				{
-					return;
-				}
-				
-				@chmod($dir, 0777);			
+				return FALSE;
 			}
+			
+			@chmod($dir_path, 0777);			
 		}
-		  
-		if ( ! $fp = @fopen($this->cache_dir.$this->cache_file, 'wb'))
+		
+		$obj->load->helper('file');	
+		if (write_file($dir_path.$filename, serialize($object)) === FALSE)
 		{
 			return FALSE;
 		}
 		
-		flock($fp, LOCK_EX);
-		fwrite($fp, $object);
-		flock($fp, LOCK_UN);
-		fclose($fp);
-		
-		@chmod($this->cache_dir.$this->cache_file, 0777);			
-
+		@chmod($dir_path.$filename, 0777);
 		return TRUE;
 	}
 
 	// --------------------------------------------------------------------
 
 	/**
+	 * Delete cache files within a particular directory
+	 *
+	 * @access	public
+	 * @return	bool
+	 */
+	function cache_delete()
+	{
+		$obj =& get_instance();	
+		$uri  = ($obj->uri->segment(1) == FALSE) ? 'base'  : $obj->uri->segment(2);
+		$uri .= ($obj->uri->segment(2) == FALSE) ? 'index' : $obj->uri->segment(2);
+		
+		$dir_path = $this->cache_dir.md5($uri).'/';
+		
+		$obj->load->helper('file');	
+		delete_files($dir_path, TRUE);
+	}
+
+	// --------------------------------------------------------------------
+
+	/**
+	 * Delete all existing cache files
+	 *
+	 * @access	public
+	 * @return	bool
+	 */
+	// --------------------------------------------------------------------
+
+	function cache_delete_all()
+	{
+		$obj =& get_instance();	
+		$obj->load->helper('file');
+		delete_files($this->cache_dir, TRUE);
+	}
+
+	// --------------------------------------------------------------------
+
+	/**
 	 * Close DB Connection
 	 * 
 	 * @access	public
